package com.hdw.med.service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hdw.common.vo.PaginationVO;
import com.hdw.med.api.MdMedTbFldService;
import com.hdw.med.bean.model.MdMedTbFld;
import com.hdw.med.bean.vo.MedTbFldQryVO;
import com.hdw.med.mapper.MdMedTbFldMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * mdMedTbFld服务实现类
 *
 * 表元数据的修改，直接使用该Service是不安全的，请使用TableDDLService
 *
 * Created by hozeData on 2021/07/08.
 */
@Service
@Transactional
public class MdMedTbFldServiceImpl implements MdMedTbFldService {

    private static final Logger LOGGER = LoggerFactory.getLogger(MdMedTbFldServiceImpl.class);

    @Autowired
    private MdMedTbFldMapper mdMedTbFldMapper;

    @Override
    public int insert(MdMedTbFld mdMedTbFld) {
        return mdMedTbFldMapper.insert(mdMedTbFld);
    }

    @Override
    public int insertSelective(MdMedTbFld mdMedTbFld)  {
        return mdMedTbFldMapper.insertSelective(mdMedTbFld);
    }

    @Override
    public int deleteById(Long idTbFld)  {
        return mdMedTbFldMapper.deleteByPrimaryKey(idTbFld);
    }

    @Override
    public int updateByIdSelective(MdMedTbFld mdMedTbFld)  {

        return mdMedTbFldMapper.updateByPrimaryKeySelective(mdMedTbFld);
    }

    @Override
    public int updateById(MdMedTbFld mdMedTbFld)  {
        return mdMedTbFldMapper.updateByPrimaryKey(mdMedTbFld);
    }

    @Override
    public MdMedTbFld getById(Long idTbFld)  {
        return mdMedTbFldMapper.selectByPrimaryKey(idTbFld);
    }

    @Override
    public List<MdMedTbFld> findByModel(MdMedTbFld mdMedTbFld)  {
        return mdMedTbFldMapper.findByModel(mdMedTbFld);
    }

    @Override
    public PaginationVO<MdMedTbFld> findPageByModel(MdMedTbFld mdMedTbFld, Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum == null? 1 : pageNum, pageSize == null? 10 : pageSize);
        List<MdMedTbFld> quesList = mdMedTbFldMapper.findByModel(mdMedTbFld);
        PageInfo<MdMedTbFld> pageInfo = new PageInfo<>(quesList);
        PaginationVO<MdMedTbFld> paginationVo = new PaginationVO(pageInfo.getTotal(), pageInfo.getList());
        return paginationVo;
    }

    @Override
    public int save(List<MdMedTbFld> list) {
        MdMedTbFld modelField = new MdMedTbFld();
        modelField.setIdTb(list.get(0).getIdTb());
        mdMedTbFldMapper.deleteByModel(modelField);
        for(MdMedTbFld etlBaseField:list) {
            this.insertSelective(etlBaseField);
        }
        return 0;
    }

    @Override
    public List<MdMedTbFld> findByTb(String idTb) {
        return mdMedTbFldMapper.findByTb(idTb);
    }

    @Override
    public List<MdMedTbFld> findTbDimField(MedTbFldQryVO record) {
        return mdMedTbFldMapper.findTbDimField(record);
    }

    @Override
    public String dimEqualsBwtweenTbs(String idTb1, String idTb2) {
        MedTbFldQryVO record = new MedTbFldQryVO();
        record.setFgAct((byte)1);
        record.setFldPrefix("dim_");
        record.setIdTb(idTb1);
        List<MdMedTbFld> fldDimList1 = this.findTbDimField(record);
        record.setIdTb(idTb2);
        List<MdMedTbFld> fldDimList2 = this.findTbDimField(record);
        record.setFldPrefix("id_dim_");
        record.setIdTb(idTb1);
        List<MdMedTbFld> fldIdDimList1 = this.findTbDimField(record);
        record.setIdTb(idTb2);
        List<MdMedTbFld> fldIdDimList2 = this.findTbDimField(record);
        fldDimList1.addAll(fldIdDimList1);
        fldDimList2.addAll(fldIdDimList2);
        StringBuffer sb = new StringBuffer();
        for(MdMedTbFld fld1:fldDimList1) {
            for(MdMedTbFld fld2:fldDimList2) {
                if(fld1.getIdPubfld().equals(fld2.getIdPubfld())) {
                    sb.append(fld1.getIdPubfld()+"="+fld2.getIdPubfld()+",");
                }
            }
        }
        return sb.toString();
    }

    @Override
    public Map<String,MdMedTbFld> findMapDataByModel(MdMedTbFld mdMedTbFld) {
        List<MdMedTbFld>  medTbFldList = this.findByModel(mdMedTbFld);
        Map<String,MdMedTbFld> map = new HashMap<>();
        for(MdMedTbFld fld:medTbFldList) {
            map.put(fld.getIdPubfld(),fld);
        }
        return map;
    }

    @Override
    public int deleteByIdTb(Long idTb) {
        MdMedTbFld fld = new MdMedTbFld();
        fld.setIdTb(idTb);
        return mdMedTbFldMapper.deleteByModel(fld);
    }
}
